﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Data;

namespace MiniFox.Data
{
    ///// <summary>
    ///// 描述一个类型为数据库中的表
    ///// </summary>
    //[AttributeUsage(AttributeTargets.Class)]
    //public sealed class TableAttribute : System.ComponentModel.DataAnnotations.Schema.TableAttribute
    //{
    //    string _name;
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    public TableAttribute() : this(string.Empty)
    //    {
    //    }
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="tableName"></param>
    //    public TableAttribute(string tableName) : base(tableName)
    //    {
    //        _name = tableName;
    //    }
    //    /// <summary>
    //    /// 表名
    //    /// </summary>
    //    public string TableName
    //    {
    //        get { return _name; }
    //    }
    //}
    ///// <summary>
    ///// 描述某个类型的属性或字段为数据库中对应表的某个列
    ///// </summary>
    //[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    //public sealed class ColumnAttribute : System.ComponentModel.DataAnnotations.Schema.ColumnAttribute
    //{
    //    string _name;
    //    bool _iskey;
    //    bool _isunique;
    //    bool _nullable;
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    public ColumnAttribute() : this(string.Empty)
    //    {
    //    }
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="columnName"></param>
    //    public ColumnAttribute(string columnName) : base(columnName)
    //    {
    //        _name = columnName;
    //        _iskey = false;
    //        _isunique = false;
    //        _nullable = true;
    //    }
    //    /// <summary>
    //    /// 列名
    //    /// </summary>
    //    public string ColumnName
    //    {
    //        get { return _name; }
    //    }
    //    /// <summary>
    //    /// 是否为主键
    //    /// </summary>
    //    public bool IsKey
    //    {
    //        get { return _iskey; }
    //        set { _iskey = value; }
    //    }
    //    /// <summary>
    //    /// 是否是唯一键
    //    /// </summary>
    //    public bool IsUnique
    //    {
    //        get { return this.IsKey ? true : _isunique; }
    //        set { _isunique = this.IsKey ? true : value; }
    //    }
    //    /// <summary>
    //    /// 是否可空
    //    /// </summary>
    //    public bool Nullable
    //    {
    //        get { return this.IsKey ? false : _nullable; }
    //        set { _nullable = this.IsKey ? false : value; }
    //    }
    //    /// <summary>
    //    /// 显示名
    //    /// </summary>
    //    public string DisplayName
    //    {
    //        get;
    //        set;
    //    }
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    public int Ordinal
    //    {
    //        get;
    //        set;
    //    }
    //    /// <summary>
    //    /// 显示格式
    //    /// </summary>
    //    public string DisplayFormat
    //    {
    //        get;
    //        set;
    //    }
    //    /// <summary>
    //    /// 是否只读
    //    /// </summary>
    //    public bool ReadOnly
    //    {
    //        get;
    //        set;
    //    }
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    public int Size
    //    {
    //        get;
    //        set;
    //    }
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    public bool Sortable
    //    {
    //        get;
    //        set;
    //    }
    //}

    /// <summary>
    /// 表示字段是递增序列
    /// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public sealed class IncrementSequenceAttribute : System.Attribute
    {
        int _seed;
        int _step;
        string _seqName;
        /// <summary>
        /// 
        /// </summary>
        public IncrementSequenceAttribute() : this(1, 1)
        {

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="seed"></param>
        /// <param name="step"></param>
        public IncrementSequenceAttribute(int seed, int step) : this(string.Empty, 1, 1)
        {
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="seqName"></param>
        public IncrementSequenceAttribute(string seqName) : this(seqName, 1, 1)
        {

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="seqName"></param>
        /// <param name="seed"></param>
        /// <param name="step"></param>
        public IncrementSequenceAttribute(string seqName, int seed, int step)
        {
            this._seqName = seqName;
            this._seed = seed;
            this._step = step;
        }

        /// <summary>
        /// 起始值
        /// </summary>
        public int Seed
        {
            get
            {
                return this._seed;
            }
        }

        /// <summary>
        /// 递增步长
        /// </summary>
        public int Step
        {
            get
            {
                return this._step;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public string SequenceName
        {
            get
            {
                return _seqName;
            }
        }
    }
    ///// <summary>
    ///// 表示字段为状态标识
    ///// </summary>
    //[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    //public sealed class EnumAttribute : System.Attribute
    //{
    //    Type type;
    //    Type baseType;
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="enumType"></param>
    //    public EnumAttribute(Type enumType) : this(enumType, typeof(byte))
    //    {
    //    }

    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="enumType"></param>
    //    /// <param name="baseType"></param>
    //    public EnumAttribute(Type enumType, Type baseType)
    //    {
    //        if (!enumType.IsEnum)
    //            throw new Exception(enumType.Name + "不是枚举类型!");

    //        this.type = enumType;
    //        this.baseType = baseType;
    //    }
    //    /// <summary>
    //    /// 获取枚举的byte数组
    //    /// </summary>
    //    public byte[] GetByte()
    //    {
    //        return (byte[])Enum.GetValues(this.type);
    //    }
    //    /// <summary>
    //    /// 获取枚举的int数组
    //    /// </summary>
    //    /// <returns></returns>
    //    public short[] GetShort()
    //    {
    //        return (short[])Enum.GetValues(this.type);
    //    }
    //    /// <summary>
    //    /// 获取枚举的int数组
    //    /// </summary>
    //    /// <returns></returns>
    //    public int[] GetInt()
    //    {
    //        return (int[])Enum.GetValues(this.type);
    //    }

    //    /// <summary>
    //    /// 获取枚举类型
    //    /// </summary>
    //    public Type EnumType
    //    {
    //        get
    //        {
    //            return this.type;
    //        }
    //    }
    //    /// <summary>
    //    /// 基元类型
    //    /// </summary>
    //    public Type BaseType
    //    {
    //        get { return this.baseType; }
    //    }
    //    /// <summary>
    //    /// 根据给定的byte值获取枚举值
    //    /// </summary>
    //    /// <param name="value"></param>
    //    /// <returns></returns>
    //    public object GetEnumValue(byte value)
    //    {
    //        return Enum.ToObject(this.type, value);
    //    }

    //    /// <summary>
    //    /// 根据给定的byte值获取枚举值
    //    /// </summary>
    //    /// <param name="value"></param>
    //    /// <returns></returns>
    //    public object GetEnumValue(short value)
    //    {
    //        return Enum.ToObject(this.type, value);
    //    }

    //    /// <summary>
    //    /// 根据给定的byte值获取枚举值
    //    /// </summary>
    //    /// <param name="value"></param>
    //    /// <returns></returns>
    //    public object GetEnumValue(int value)
    //    {
    //        return Enum.ToObject(this.type, value);
    //    }

    //    /// <summary>
    //    /// 根据给定的byte值获取枚举值
    //    /// </summary>
    //    /// <param name="value"></param>
    //    /// <returns></returns>
    //    public object GetEnumValue(object value)
    //    {
    //        return Enum.ToObject(this.type, value);
    //    }

    //    /// <summary>
    //    /// 看是否定义了该值
    //    /// </summary>
    //    /// <returns></returns>
    //    public Boolean IsDefined(object value)
    //    {
    //        return Enum.IsDefined(this.type, value);
    //    }
    //}

}
